/**
 * 编辑器服务
 * 提供编辑器操作的全局事件通信
 */

// 替换文本请求接口
export interface ReplaceTextRequest {
  originalText: string;
  newText: string;
  options?: {
    formatAsHtml?: boolean;
    preserveFormatting?: boolean;
  };
}

// 使用简单的事件发布-订阅模式
type Listener<T> = (data: T) => void;

class EventEmitter<T> {
  private listeners: Listener<T>[] = [];

  subscribe(listener: Listener<T>): () => void {
    this.listeners.push(listener);
    
    // 返回取消订阅函数
    return () => {
      this.listeners = this.listeners.filter(l => l !== listener);
    };
  }

  emit(data: T): void {
    this.listeners.forEach(listener => {
      try {
        listener(data);
      } catch (error) {
        console.error('事件监听器执行出错:', error);
      }
    });
  }
}

// 创建替换文本的事件发射器
const replaceTextEmitter = new EventEmitter<ReplaceTextRequest>();

// 导出订阅替换请求的方法
export const subscribeToReplaceTextRequests = (
  listener: Listener<ReplaceTextRequest>
): () => void => {
  return replaceTextEmitter.subscribe(listener);
};

// 导出发起替换请求的方法
export const requestTextReplace = (request: ReplaceTextRequest): void => {
  console.log('发起替换文本请求:', request);
  replaceTextEmitter.emit(request);
}; 